package com.collection.service;

import java.util.List;
import java.util.Map;

import com.collection.entity.BaseStrategy;
import com.collection.entity.CollectionTask;
import com.collection.entity.ContentStrategy;
import com.collection.entity.PublishConfig;
import com.collection.entity.UrlParam;
import com.collection.entity.WebsiteStrategy;


public interface CollectionTaskService {
	
	/**
	 * 根据ID获取采集任务
	 * @param id 采集任务ID
	 * @return 采集任务对象
	 */
	CollectionTask getCollectionTaskById(Integer id);
	
	/**
	 * 创建采集任务
	 * @param collectionTask 采集任务对象
	 */
	void createCollectionTask(CollectionTask collectionTask);
	
	/**
	 * 修改采集任务
	 * @param collectionTask 采集任务对象
	 */
	void modifyCollectionTask(CollectionTask collectionTask);
	
	/**
	 * 根据ID删除采集任务
	 * @param id
	 */
	void deleteCollectionTask(Integer id);
	
	/**
	 * 删除采集任务
	 * @param collectionTask 采集任务对象
	 */
	void deleteCollectionTask(CollectionTask collectionTask);
	
	/**
	 * 获取所有采集任务
	 * @return
	 */
	List<CollectionTask> findAllCollectionTasks();
	
	/**
	 * 采集网址
	 * @param websiteStrategy 网址采集策略
	 * @return 所采集到的网址
	 */
	public List<String> collectionWebsite(WebsiteStrategy websiteStrategy);
	
	/**
	 * 采集内容
	 * @param contentStrategy 内容采集策略
	 * @param url 内容采集URL
	 * @return 所采集到的内容
	 */
	public List<Map<String, String>> collectionContent(ContentStrategy contentStrategy);
	
	/**
	 * 采集数据
	 * @param host 采集的网站主机名
	 * @param url 采集的URL
	 * @param charCode 采集页面字符编码
	 * @param baseStrategy 采集字段策略
	 * @return 所采集到的内容
	 */
	public List<String> collectionData(String url, String charCode, BaseStrategy baseStrategy);
	
	/**
	 * 将采集到数据导入到数据库中
	 * @param dataList 采集到的数据
	 * @param dbConfig 数据库配置信息
	 */
	//public void importData(List<Map<String, List<String>>> dataList, DBConfig dbConfig);
	
	/**
	 * 采集页面所有需要采集的URL
	 * @param urlParams url参数
	 * @param url 采集URL
	 * @param i url占位符对应下标
	 * @param urls 保存所有需要采集的URL
	 */
	public void createUrl(List<UrlParam> urlParams, String url, int i, List<String> urls);
	
	/**
	 * 自动获取分页URL
	 * @param url  页面URL
	 * @param charCode 页面编码
	 * @param pageStartTag 分页开始标签
	 * @param pageStartEnd 分页结束标签
	 * @return
	 */
	public String autoGetPageUrl(String url, String charCode, String pageStartTag, String pageStartEnd);
	/**
	 * 通过URL,与页面编码获取页面内容
	 * @param path
	 * @param charCode
	 * @return
	 */
	public String getHtmlContent(String path, String charCode);
	
	/**
	 * 根据URL获取url对应主机名
	 * @param path 页面url
	 * @return 
	 */
	public String getHost(String path);
	
	/**
	 * 导入采集到的url到采集表中
	 * @param urls 所采集的URL
	 * @param tableName 导入表名
	 */
	public void importPageUrl(List<String> urls, String tableName);
	
	/**
	 * 统计未采集到的URL总数
	 * @param tableName 任务表名
	 * return 未采集到的URL总数
	 */
	public int countHasNoCollectionUrls(String tableName);
	
	/**
	 * 获取未采集到的URL
	 * @param tableName 任务表名
	 * @param start 数据开始下标
	 * @param lenght 数据行数
	 * return 未采集的URL
	 */
	public List<String> findHasNoCollectionUrls(String tableName, int start, int length);
	
	/**
	 * 导入对应URL采集的内容
	 * @param contentMap 采集内容
	 * @param url 所采集的URL
	 * @param tableName 导入表名
	 */
	public void importPageContent(Map<String, String> contentMap, String url, String tableName);
	
	/**
	 * 发布采集到的数据
	 * @param publishConfig 发布内容配置
	 * return 导入的数据
	 */
	public List<Map<String, Object>> publishContent(PublishConfig publishConfig);
	
	/**
	 * 采集任务别名是否已经存在
	 * @param alias
	 * @return
	 */
	public boolean taskAliasExist(String alias);
	
	/**
	 * 设置采集任务采集内容表
	 * @param tableName
	 */
	public void setTableName(String tableName);
	
	/**
	 * 设置是否为测试采集
	 * @param isTest
	 */
	public void setTest(boolean isTest);
}
